package com.dff.jrfw.utils;

import android.graphics.Color;
import android.os.CountDownTimer;
import android.widget.TextView;

/**
 * @ProjectName: HeyTool
 * @ClassName: CountDownHelper
 * @Description: 验证码倒计时工具类
 * @Author: Wangzheng
 * @CreateDate: 2020/11/12 23:30
 */
public class CountDownHelper {
    // 倒计时timer
    private CountDownTimer countDownTimer;
    // 计时结束的回调接口
    private OnFinishListener listener;

    private TextView mButton;

    public CountDownHelper(TextView button, final String defaultString, int max, int interval) {
        this(button, defaultString, "重新发送", max, interval);
    }

    /**
     * @param button        需要显示倒计时的Button
     * @param defaultString 默认显示的字符串
     * @param max           需要进行倒计时的最大值,单位是秒
     * @param interval      倒计时的间隔，单位是秒
     */
    public CountDownHelper(TextView button, final String defaultString, final String prefix, int max, int interval) {
        this.mButton = button;
        // 由于CountDownTimer并不是准确计时，在onTick方法调用的时候，time会有1-10ms左右的误差，这会导致最后一秒不会调用onTick()
        // 因此，设置间隔的时候，默认减去了10ms，从而减去误差。
        // 经过以上的微调，最后一秒的显示时间会由于10ms延迟的积累，导致显示时间比1s长max*10ms的时间，其他时间的显示正常,总时间正常
        countDownTimer = new CountDownTimer(max * 1000, interval * 1000 - 10) {

            @Override
            public void onTick(long time) {
                // 第一次调用会有1-10ms的误差，因此需要+15ms，防止第一个数不显示，第二个数显示2s
                String timeStr = prefix + ((time + 15) / 1000) + "s";
                mButton.setText(timeStr);
//                String textStrHtml = "重新发送<font color=\"#999999\">" + timeStr + "</font>";
//                        + "<font color=\"#999999\">" + hintString + "</font>";
//                mButton.setText(Html.fromHtml(textStrHtml));
            }

            @Override
            public void onFinish() {
                mButton.setEnabled(true);
                mButton.setTextColor(Color.parseColor("#007AFF"));
                mButton.setText(defaultString);
                if (listener != null) {
                    listener.finish();
                }
            }
        };
    }

    /**
     * 开始倒计时
     */
    public void start() {
        mButton.setEnabled(false);
        countDownTimer.start();
    }

    public void stop() {
        if (countDownTimer != null) {
            countDownTimer.cancel();
        }
    }

    /**
     * 设置倒计时结束的监听器
     *
     * @param listener
     */
    public void setOnFinishListener(OnFinishListener listener) {
        this.listener = listener;
    }

    /**
     * 计时结束的回调接口
     *
     * @author zhaokaiqiang
     */
    public interface OnFinishListener {
        void finish();
    }
}
